/**
 * actions主要负责与后台交互的各种数据通信
 * 基本上除了验证码等临时的请求外，所有的数据都是通过actions来做的
 * async表示函数是一个异步方法，而await是等待一个方法的完成，即化异步为同步
 */
 import {
  REC_GEOHASH,
  REC_ADDRESS,
  REC_CATEGORIES,
  REC_SHOPS,
} from './mutations_type'

import {
  reqGeohash,
  reqAddress,
  reqCategories,
  reqShops
} from 'api/index'

export const actions = {

  /**
   * getGeohash
   * 注意：应该放入回调函数中进行数据的提交
   * 回调函数如何传值问题
   * @param {*} commit 
   */
  getGeohash({commit}) {
    reqGeohash().then(res => { // 直接使用promise对象
      let geohash = res
      commit(REC_GEOHASH, {geohash}) // 注意在回调函数中进行数据的提交，否则不生效
    })
  },

  async getAddress({commit, state}) {  // 使用的是关键字 async和await，能够直接将数据返回
    
    let result = await reqAddress(state.geohash)

    if(result && result.code === 0) {
      let address = result.data
      commit(REC_ADDRESS, {address})
      // console.log("地址打印",address);
    }else {
      console.log("获取地址失败！");
    }
  },

  async getCategories({commit}) {

    let result = await reqCategories()

    if(result.code === 0){
      let categories = result.data
      console.log(categories);
      commit(REC_CATEGORIES, {categories})
    }else {
      console.log("获取商品分类失败！！");
    }
  },

  async getShops({commit, state}) {
    let latitude = state.geohash.split(',')[0]
    let longitude = state.geohash.split(',')[1]

    let result = await reqShops({longitude,latitude})
    if(result.code === 0){
      let shops = result.data
      commit(REC_SHOPS, {shops})
    }else {
      console.log("获取商家失败！！");
    }
  }
}